{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "CreditCardFraudDetection.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Qvrf7aY2u6Io"
      },
      "source": [
        "**Credit Card Fraud Detection**\r\n",
        "\r\n",
        "---\r\n",
        "This model will help to recognize fraudent credit card transaction , so that customers are not charged for the items that they have not purchased.\r\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "JpCXjG6zv2BE"
      },
      "source": [
        "#Importing all the necessary libraries\r\n",
        "import numpy as np\r\n",
        "import pandas as pd\r\n",
        "import matplotlib.pyplot as plt\r\n",
        "import seaborn as sns\r\n",
        "from matplotlib import gridspec"
      ],
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 217
        },
        "id": "ambwBXf3wve9",
        "outputId": "cfb6ca2f-e84c-4c85-c075-7b00d9fe5e27"
      },
      "source": [
        "#Importing the dataset from the  csv file\r\n",
        "data=pd.read_csv('/content/creditcard.csv')\r\n",
        "data.sample(5)"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Time</th>\n",
              "      <th>V1</th>\n",
              "      <th>V2</th>\n",
              "      <th>V3</th>\n",
              "      <th>V4</th>\n",
              "      <th>V5</th>\n",
              "      <th>V6</th>\n",
              "      <th>V7</th>\n",
              "      <th>V8</th>\n",
              "      <th>V9</th>\n",
              "      <th>V10</th>\n",
              "      <th>V11</th>\n",
              "      <th>V12</th>\n",
              "      <th>V13</th>\n",
              "      <th>V14</th>\n",
              "      <th>V15</th>\n",
              "      <th>V16</th>\n",
              "      <th>V17</th>\n",
              "      <th>V18</th>\n",
              "      <th>V19</th>\n",
              "      <th>V20</th>\n",
              "      <th>V21</th>\n",
              "      <th>V22</th>\n",
              "      <th>V23</th>\n",
              "      <th>V24</th>\n",
              "      <th>V25</th>\n",
              "      <th>V26</th>\n",
              "      <th>V27</th>\n",
              "      <th>V28</th>\n",
              "      <th>Amount</th>\n",
              "      <th>Class</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>77008</th>\n",
              "      <td>56841.0</td>\n",
              "      <td>1.137066</td>\n",
              "      <td>0.198191</td>\n",
              "      <td>0.487977</td>\n",
              "      <td>1.290505</td>\n",
              "      <td>-0.399763</td>\n",
              "      <td>-0.607979</td>\n",
              "      <td>0.018824</td>\n",
              "      <td>-0.033684</td>\n",
              "      <td>0.096579</td>\n",
              "      <td>0.040594</td>\n",
              "      <td>-0.061494</td>\n",
              "      <td>-0.122744</td>\n",
              "      <td>-0.945553</td>\n",
              "      <td>0.560406</td>\n",
              "      <td>1.267106</td>\n",
              "      <td>-0.193082</td>\n",
              "      <td>-0.023509</td>\n",
              "      <td>-0.509760</td>\n",
              "      <td>-0.954792</td>\n",
              "      <td>-0.210377</td>\n",
              "      <td>0.118273</td>\n",
              "      <td>0.344390</td>\n",
              "      <td>-0.041974</td>\n",
              "      <td>0.392513</td>\n",
              "      <td>0.520993</td>\n",
              "      <td>-0.270156</td>\n",
              "      <td>0.026225</td>\n",
              "      <td>0.022775</td>\n",
              "      <td>19.90</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>72778</th>\n",
              "      <td>54854.0</td>\n",
              "      <td>1.074413</td>\n",
              "      <td>-0.218444</td>\n",
              "      <td>0.621600</td>\n",
              "      <td>-0.200875</td>\n",
              "      <td>-0.138312</td>\n",
              "      <td>0.818131</td>\n",
              "      <td>-0.533301</td>\n",
              "      <td>0.408467</td>\n",
              "      <td>0.347610</td>\n",
              "      <td>-0.405675</td>\n",
              "      <td>1.033836</td>\n",
              "      <td>0.733628</td>\n",
              "      <td>0.049133</td>\n",
              "      <td>0.259668</td>\n",
              "      <td>2.310710</td>\n",
              "      <td>-0.958433</td>\n",
              "      <td>0.956446</td>\n",
              "      <td>-2.477004</td>\n",
              "      <td>-1.646190</td>\n",
              "      <td>-0.210919</td>\n",
              "      <td>0.007529</td>\n",
              "      <td>0.188536</td>\n",
              "      <td>0.264356</td>\n",
              "      <td>-0.584891</td>\n",
              "      <td>-0.239169</td>\n",
              "      <td>1.013203</td>\n",
              "      <td>0.001636</td>\n",
              "      <td>-0.002091</td>\n",
              "      <td>1.69</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>153549</th>\n",
              "      <td>99410.0</td>\n",
              "      <td>-1.990375</td>\n",
              "      <td>1.993107</td>\n",
              "      <td>2.809257</td>\n",
              "      <td>4.318494</td>\n",
              "      <td>-0.659549</td>\n",
              "      <td>1.073989</td>\n",
              "      <td>-0.559037</td>\n",
              "      <td>0.323636</td>\n",
              "      <td>1.654405</td>\n",
              "      <td>3.149553</td>\n",
              "      <td>-0.380589</td>\n",
              "      <td>-4.529612</td>\n",
              "      <td>-0.243285</td>\n",
              "      <td>0.782775</td>\n",
              "      <td>1.032213</td>\n",
              "      <td>0.425087</td>\n",
              "      <td>0.582722</td>\n",
              "      <td>1.301665</td>\n",
              "      <td>0.492717</td>\n",
              "      <td>0.901704</td>\n",
              "      <td>-0.270491</td>\n",
              "      <td>0.325413</td>\n",
              "      <td>-0.114781</td>\n",
              "      <td>-0.096169</td>\n",
              "      <td>0.216496</td>\n",
              "      <td>0.536471</td>\n",
              "      <td>0.838684</td>\n",
              "      <td>0.398057</td>\n",
              "      <td>0.97</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>84904</th>\n",
              "      <td>60512.0</td>\n",
              "      <td>-1.070322</td>\n",
              "      <td>1.218168</td>\n",
              "      <td>2.559825</td>\n",
              "      <td>0.657219</td>\n",
              "      <td>0.772074</td>\n",
              "      <td>0.058858</td>\n",
              "      <td>1.055657</td>\n",
              "      <td>-0.125679</td>\n",
              "      <td>-1.035473</td>\n",
              "      <td>-0.147682</td>\n",
              "      <td>-0.434903</td>\n",
              "      <td>0.106672</td>\n",
              "      <td>0.840457</td>\n",
              "      <td>-0.513239</td>\n",
              "      <td>-0.313461</td>\n",
              "      <td>0.944797</td>\n",
              "      <td>-1.202607</td>\n",
              "      <td>-0.591610</td>\n",
              "      <td>-3.042283</td>\n",
              "      <td>-0.171756</td>\n",
              "      <td>0.193171</td>\n",
              "      <td>0.606669</td>\n",
              "      <td>-0.423391</td>\n",
              "      <td>0.095063</td>\n",
              "      <td>0.567516</td>\n",
              "      <td>-0.137320</td>\n",
              "      <td>-0.284825</td>\n",
              "      <td>-0.161542</td>\n",
              "      <td>6.42</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>94282</th>\n",
              "      <td>64814.0</td>\n",
              "      <td>-0.821480</td>\n",
              "      <td>1.148243</td>\n",
              "      <td>1.641268</td>\n",
              "      <td>2.214619</td>\n",
              "      <td>0.379240</td>\n",
              "      <td>0.084930</td>\n",
              "      <td>0.703286</td>\n",
              "      <td>0.026994</td>\n",
              "      <td>-1.238617</td>\n",
              "      <td>0.597985</td>\n",
              "      <td>-0.482550</td>\n",
              "      <td>-0.687028</td>\n",
              "      <td>-0.643360</td>\n",
              "      <td>0.365526</td>\n",
              "      <td>1.001141</td>\n",
              "      <td>0.057233</td>\n",
              "      <td>-0.066984</td>\n",
              "      <td>-0.577419</td>\n",
              "      <td>-0.434576</td>\n",
              "      <td>-0.121994</td>\n",
              "      <td>-0.047947</td>\n",
              "      <td>-0.277795</td>\n",
              "      <td>0.070772</td>\n",
              "      <td>0.027393</td>\n",
              "      <td>-0.469333</td>\n",
              "      <td>-0.153918</td>\n",
              "      <td>-0.149963</td>\n",
              "      <td>0.198673</td>\n",
              "      <td>37.00</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "           Time        V1        V2  ...       V28  Amount  Class\n",
              "77008   56841.0  1.137066  0.198191  ...  0.022775   19.90    0.0\n",
              "72778   54854.0  1.074413 -0.218444  ... -0.002091    1.69    0.0\n",
              "153549  99410.0 -1.990375  1.993107  ...  0.398057    0.97    0.0\n",
              "84904   60512.0 -1.070322  1.218168  ... -0.161542    6.42    0.0\n",
              "94282   64814.0 -0.821480  1.148243  ...  0.198673   37.00    0.0\n",
              "\n",
              "[5 rows x 31 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JxhYINARxB-m",
        "outputId": "2aea64e3-04fa-42d8-b2a5-8eb682981f87"
      },
      "source": [
        "#Identifying any NAN value in dataset\r\n",
        "data.isnull().sum(axis=0)"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Time      0\n",
              "V1        0\n",
              "V2        0\n",
              "V3        0\n",
              "V4        0\n",
              "V5        0\n",
              "V6        0\n",
              "V7        0\n",
              "V8        0\n",
              "V9        0\n",
              "V10       0\n",
              "V11       0\n",
              "V12       0\n",
              "V13       0\n",
              "V14       0\n",
              "V15       0\n",
              "V16       0\n",
              "V17       0\n",
              "V18       0\n",
              "V19       0\n",
              "V20       0\n",
              "V21       0\n",
              "V22       1\n",
              "V23       1\n",
              "V24       1\n",
              "V25       1\n",
              "V26       1\n",
              "V27       1\n",
              "V28       1\n",
              "Amount    1\n",
              "Class     1\n",
              "dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Q9WVoWBAAyub",
        "outputId": "660ec4ad-7981-4774-ca83-2ddb287a13f4"
      },
      "source": [
        "#Replacing NAN values with required values\r\n",
        "data['Class']=data['Class'].fillna(0)\r\n",
        "items=data.columns\r\n",
        "for item in items:\r\n",
        "  if item!='Class':\r\n",
        "    data[item]=data[item].fillna(data[item].mean())\r\n",
        "\r\n",
        "  \r\n",
        "\r\n",
        "data.isnull().sum(axis=0)"
      ],
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Time      0\n",
              "V1        0\n",
              "V2        0\n",
              "V3        0\n",
              "V4        0\n",
              "V5        0\n",
              "V6        0\n",
              "V7        0\n",
              "V8        0\n",
              "V9        0\n",
              "V10       0\n",
              "V11       0\n",
              "V12       0\n",
              "V13       0\n",
              "V14       0\n",
              "V15       0\n",
              "V16       0\n",
              "V17       0\n",
              "V18       0\n",
              "V19       0\n",
              "V20       0\n",
              "V21       0\n",
              "V22       0\n",
              "V23       0\n",
              "V24       0\n",
              "V25       0\n",
              "V26       0\n",
              "V27       0\n",
              "V28       0\n",
              "Amount    0\n",
              "Class     0\n",
              "dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 18
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "iWIrOo7HxoOH",
        "outputId": "d35e4f53-b316-46d4-ee24-92d3872ba0e2"
      },
      "source": [
        "#Describing the data\r\n",
        "print(\"Shape of the Data:\", data.shape)\r\n",
        "print(\"Description of the data:\")\r\n",
        "print(data.describe())"
      ],
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Shape of the Data: (156612, 31)\n",
            "Description of the data:\n",
            "                Time             V1  ...         Amount          Class\n",
            "count  156612.000000  156612.000000  ...  156612.000000  156612.000000\n",
            "mean    56114.721286      -0.226386  ...      88.193486       0.002235\n",
            "std     23396.766143       1.845422  ...     246.282347       0.047221\n",
            "min         0.000000     -56.407510  ...       0.000000       0.000000\n",
            "25%     39715.750000      -1.015986  ...       5.850000       0.000000\n",
            "50%     57468.500000      -0.252679  ...      22.060000       0.000000\n",
            "75%     74684.000000       1.167918  ...      78.000000       0.000000\n",
            "max    108499.000000       2.439207  ...   19656.530000       1.000000\n",
            "\n",
            "[8 rows x 31 columns]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0UzNUcSBzLLw",
        "outputId": "3cca947f-4375-48ad-acea-20b293f07850"
      },
      "source": [
        "#Determine the number of fraud cases\r\n",
        "fraud=data[data['Class']==1]\r\n",
        "valid=data[data['Class']==0]\r\n",
        "OutlierFraction=len(fraud)/float(len(valid))\r\n",
        "print(\"Number of fraud cases as compared to valid cases:\", OutlierFraction)\r\n",
        "print('Fraud Cases: {}'.format(len(fraud)))\r\n",
        "print('Valid Cases: {}'.format(len(valid)))"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Number of fraud cases as compared to valid cases: 0.002239827981211043\n",
            "Fraud Cases: 350\n",
            "Valid Cases: 156262\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9HytJowT54hI",
        "outputId": "fe4a0e20-0045-472c-9a39-52852e03786e"
      },
      "source": [
        "#Details of Fraudulent transaction\r\n",
        "print(\"Amount details of Fraudulent Transaction:\")\r\n",
        "fraud.Amount.describe()"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Amount details of Fraudulent Transaction:\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "count     350.000000\n",
              "mean      111.344486\n",
              "std       228.490673\n",
              "min         0.000000\n",
              "25%         1.000000\n",
              "50%         9.905000\n",
              "75%       101.500000\n",
              "max      1809.680000\n",
              "Name: Amount, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 21
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JrllKbV86P8t",
        "outputId": "ce9737cb-5ae8-4b8e-b9f9-6ef74e49f49b"
      },
      "source": [
        "#Details of Valid Transaction\r\n",
        "print(\"Amount details of Valid Transaction:\")\r\n",
        "valid.Amount.describe()"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Amount details of Valid Transaction:\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "count    156262.000000\n",
              "mean         88.141632\n",
              "std         246.318991\n",
              "min           0.000000\n",
              "25%           5.900000\n",
              "50%          22.080000\n",
              "75%          77.980000\n",
              "max       19656.530000\n",
              "Name: Amount, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 22
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 570
        },
        "id": "Es-stM3Y6oJ2",
        "outputId": "01861e0c-161d-45e4-f02a-9a8d31eb9126"
      },
      "source": [
        "#Correlation matrix for given dataset\r\n",
        "corrmat=data.corr()\r\n",
        "fig=plt.figure(figsize=(12,9))\r\n",
        "sns.heatmap(corrmat,vmax=0.8,square=True)\r\n",
        "plt.show()"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 864x648 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "w8CZ30fc7gIQ",
        "outputId": "f5eea510-386f-420a-f1cf-5e954ebe6791"
      },
      "source": [
        "#Creating X and y labels using the dataset\r\n",
        "X=data.drop(['Class'],axis=1)\r\n",
        "Y=data['Class']\r\n",
        "print(\"Shape of X:\", X.shape)\r\n",
        "print(\"Shape of Y:\" , Y.shape)\r\n",
        "\r\n",
        "xData=X.values\r\n",
        "yData=Y.values"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Shape of X: (156612, 30)\n",
            "Shape of Y: (156612,)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "RfrH8qSB8Wsh",
        "outputId": "23d61b99-f198-482c-e3c4-07e66585b950"
      },
      "source": [
        "#Using Skicit-learn to split data into training and testing data\r\n",
        "from sklearn.model_selection import train_test_split\r\n",
        "\r\n",
        "#Spliting the data into training and testing data\r\n",
        "xTrain,xTest,yTrain,yTest=train_test_split(xData,yData,test_size=0.2,random_state=42)\r\n",
        "\r\n",
        "print(\"Shape of Training Data:\",xTrain.shape)\r\n",
        "print(\"Shape of Testing Data:\",xTest.shape)"
      ],
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Shape of Training Data: (125289, 30)\n",
            "Shape of Testing Data: (31323, 30)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Gz00gvIh_Sst",
        "outputId": "ed297e73-a52c-4f89-a067-71c9e0a9d84c"
      },
      "source": [
        "#Building a Random Forest Classifier\r\n",
        "from sklearn.ensemble import RandomForestClassifier\r\n",
        "#Random forest model creation\r\n",
        "rfc=RandomForestClassifier()\r\n",
        "rfc.fit(xTrain,yTrain)"
      ],
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
              "                       criterion='gini', max_depth=None, max_features='auto',\n",
              "                       max_leaf_nodes=None, max_samples=None,\n",
              "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
              "                       min_samples_leaf=1, min_samples_split=2,\n",
              "                       min_weight_fraction_leaf=0.0, n_estimators=100,\n",
              "                       n_jobs=None, oob_score=False, random_state=None,\n",
              "                       verbose=0, warm_start=False)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 26
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yuZ0GINzAZNB"
      },
      "source": [
        "#Predicting on Test set using above trained models\r\n",
        "yPred=rfc.predict(xTest)"
      ],
      "execution_count": 27,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "TAQu-NWBEdCd",
        "outputId": "76cb34ba-c5dc-400c-a740-11c634b7002e"
      },
      "source": [
        "#Evaluating the Random Forest Classifier\r\n",
        "from sklearn.metrics import classification_report,accuracy_score\r\n",
        "from sklearn.metrics import precision_score,recall_score\r\n",
        "from sklearn.metrics import f1_score,matthews_corrcoef\r\n",
        "from sklearn.metrics import confusion_matrix\r\n",
        "\r\n",
        "n_outliers = len(fraud) \r\n",
        "n_errors = (yPred != yTest).sum() \r\n",
        "print(\"The model used is Random Forest classifier\") \r\n",
        "  \r\n",
        "acc = accuracy_score(yTest, yPred) \r\n",
        "print(\"The accuracy is {}\".format(acc)) \r\n",
        "  \r\n",
        "prec = precision_score(yTest, yPred) \r\n",
        "print(\"The precision is {}\".format(prec)) \r\n",
        "  \r\n",
        "rec = recall_score(yTest, yPred) \r\n",
        "print(\"The recall is {}\".format(rec)) \r\n",
        "  \r\n",
        "f1 = f1_score(yTest, yPred) \r\n",
        "print(\"The F1-Score is {}\".format(f1)) \r\n",
        "  \r\n",
        "MCC = matthews_corrcoef(yTest, yPred) \r\n",
        "print(\"The Matthews correlation coefficient is{}\".format(MCC)) "
      ],
      "execution_count": 29,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "The model used is Random Forest classifier\n",
            "The accuracy is 0.9996168949334355\n",
            "The precision is 0.9137931034482759\n",
            "The recall is 0.8833333333333333\n",
            "The F1-Score is 0.8983050847457628\n",
            "The Matthews correlation coefficient is0.8982427433705649\n"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}